function RMask(r, e, n, b){
	if (r.test(e.value)!=(b==1?true:false)) {
		e.focus();
		e.oBGC=e.backgroundColor;
		e.backgroundColor='#FF9999';
		alert(n);
		return false;
	} else {
		try{ e.backgroundColor=e.oBGC; } catch(err) {}
	}
	return true;
}

function Mask(e, m){
	if (/\W/.test(String.fromCharCode(event.keyCode)) && event.keyCode>0) return true;
	if(event.keyCode>0){
		e.focus();
		var sel = document.selection;
		var rng = sel.createRange();
		rng.colapse;
		if((sel.type == "Text" || sel.type == "None") && rng != null){
			rng.text = String.fromCharCode(event.keyCode);
		}
	}
	var ev    = e.value;
	if (event.keyCode>0)
	{
		e.value = '';
		e.select();
	}
	var cIndx = -1;
	var Out   = '';
	var cChar = '';
	var mChar = ''
	var nChar = '';
	var Hold  = '';
	var rx;

	for(var i=0; i<m.length; i++){
		mChar = m.substr(i, 1)
		if(mChar=='#' || mChar=='@'){
			if(mChar=='#'){rx = /\d/;} else if(mChar=='@'){rx = /[a-zA-Z]/;}
			cChar = ev.substr(++cIndx, 1);
			if(m.substr(i+1,1)!='*')
				cChar.toString();
				while(cIndx < ev.length && !rx.test(cChar))
					cChar = ev.substr(++cIndx, 1);
			if (cIndx < ev.length && rx.test(cChar)){
				Out += Hold + ev.substr(cIndx,1);
				Hold = '';
				if(m.substr(i+1,1)=='*' || m.substr(i+1,1)=='+'){
					nChar = ev.substr(cIndx+1, 1);
					while(cIndx < ev.length && rx.test(nChar)){
						Out += nChar;
						nChar = ev.substr(++cIndx+1, 1);
					}
				}
			} else if (cIndx < ev.length && m.substr(i+1,1)=='*'){
				--cIndx;
			}
		} else if(mChar!='*' && mChar!='+') {
			Hold += mChar;
		}
		if(cIndx >= ev.length){
			e.value = Out;
			return false;
		}
	}
	e.value = Out;
	return false;
}
